Contributors: Jellejurre, JustSleightly
Built-In VRC Parameters
There are certain parameters that are set by VRChat automatically. These parameters will be set on any Playable Layer (such as the FX Layer) for you. VRChat’s own article on this is actually pretty good, so this article adds some common use cases and caveats where applicable.
Example: If you add a parameter called IsLocal
to your FX Layer, it will automatically be set to True or False* based on whether or not the avatar is being played locally or remotely.
These parameters are read-only and will not be set on sub animators, only Playable Layer animators.
The value parameters are set depending on the type of the Parameter. They follow the rules of Expression Parameter Mismatching, so for example IsLocal as a float would be set to 0.0 or 1.0, while a bool would be set to True or False. Be careful when mismatching Built-In parameters however, as having two of the same parameter with different types will break your Animator Controller, so if people merge other controllers that use the parameter with the original type, this will break the Animator Controller.
Parameter Name | Parameter Description | Parameter Type | Sync Type | Example Use Cases |
---|---|---|---|---|
IsLocal | True if the avatar is being worn locally, false otherwise. So when in a lobby, your own avatar has IsLocal set to True, and all the avatars around you have IsLocal set to false | Bool | Playable | Complex systems perform logic locally and just visualize remotely |
Viseme | If the Avatar Descriptor’s Lip Sync is set to Viseme Blend Shape or Viseme Parameter Only, animates the value from 0 to 14 based on the following viseme values: 0: sil, 1: pp, 2: ff, 3: th, 4: dd, 5: kk, 6: ch, 7: ss, 8: nn, 9: rr, 10: aa, 11: e, 12: i, 13: o, 14: u If the Avatar Descriptor’s Lip Sync is set to Jaw Bone Flap or Jaw Flap Blend Shape, animates the value from 0 to 100 based on volume | Int | Speech | Animating a second head’s visemes |
Voice | Microphone Volume, from 0.0 to 1.0. Note that this is perceived volume, so it’s affected by earmuffs and distance | Float | Speech | Used to animate properties based on voice like pseudo-audiolink |
GestureLeft | The gesture performed by the left hand. 0: Neutral, 1: Fist, 2: HandOpen, 3: FingerPoint, 4: Victory, 5: RockNRoll, 6: HandGun, 7: ThumbsUp | Int | IK | Used for any system that responds to gestures, as well as facial expressions and hand gestures. More at Hand Gestures/Facial Expressions |
GestureRight | The gesture performed by the right hand. 0: Neutral, 1: Fist, 2: HandOpen, 3: FingerPoint, 4: Victory, 5: RockNRoll, 6: HandGun, 7: ThumbsUp | Int | IK | Used for any system that responds to gestures, as well as facial expressions and hand gestures. More at Hand Gestures/Facial Expressions |
GestureLeftWeight | The Analog trigger value on the left hand. For Quest controllers this is the side button, for Index/Vive controllers this is the trigger. Note that during the Fist gesture, this a smooth transition between 0-1, but during other gestures, it’s flat 1 or 0 | Float | Playable | Used for controlling systems which need more precise input, possibly used in facial expression and hand gestures. More at Hand Gestures/Facial Expressions |
GestureRightWeight | The Analog trigger value on the right hand. For Quest controllers this is the side button, for Index/Vive controllers this is the trigger. Note that during the Fist gesture, this a smooth transition between 0-1, but during other gestures, it’s flat 1 or 0 | Float | Playable | Used for controlling systems which need more precise input, possibly used in facial expression and hand gestures. More at Hand Gestures/Facial Expressions |
AngularY | How fast the user is spinning (caps at -1024, 1024) Note that locally, playspace moving doesn’t count, but remotely it does | Float | IK | Used for systems where the user’s angular velocity is needed |
VelocityX | The Left-Right movement speed in m/s Note that locally, playspace moving doesn’t count, but remotely it does | Float | IK | Used for locomotion and other systems where the user’s velocity is needed |
VelocityY | Down-Up movement speed in m/s Note that locally, playspace moving doesn’t count, but remotely it does | Float | IK | Used for locomotion and other systems where the user’s velocity is needed |
VelocityZ | Back-Forward movement speed in m/s Note that locally, playspace moving doesn’t count, but remotely it does | Float | IK | Used for locomotion and other systems where the user’s velocity is needed |
VelocityMagnitude | The total magnitude of the velocity, calculated as Note that locally, playspace moving doesn’t count, but remotely it does | Float | IK | Used for locomotion and other systems where the user’s velocity is needed |
Upright | How "upright" the user is. 0 is prone, 1 is standing straight up | Float | IK | Used for Locomotion to determine crouching/sitting/standing |
Grounded | Whether or not the user is touching the ground | Bool | IK | Used to detect jumping |
Seated | True if the user is in a Station with the Seated flag enabled. More information can be found at the Stations page. | Bool | IK | Used to play sitting animations |
AFK | Is the user AFK, which means headset inactive (VR) or the user has pressed the End key (desktop) | Bool | IK | Used to play AFK animations. |
Expression1 - Expression16 | A remnant from early 3.0. Has no use for us now, except for that we shouldn’t name our own parameters this. | Int / Float | IK or Playable | - |
TrackingType | Used to determine the tracking type the user has: 0: Uninitialized, 1: Generic rig, 2: AV2 avatar, 3:Head and Hands tracking if VR, or humanoid if Desktop, 4: 4-point tracking, Head, hands, hip, 5: Full body tracking, Head, hands, hip, feet | Int | Playable | Used for locomotion to switch between different animation types |
VRMode | Returns 1 if the user is in VR, 0 if they are not | Int | IK | Used for systems that have different interfaces between Desktop and VR |
MuteSelf | Whether or not the user is Muted | Bool | Playable | Used to display “I am muted” effects |
InStation | Whether or not the user is in a station. Note that not every station immobilizes the user | Bool | IK | - |
Earmuffs | Whether or not the user is using Earmuffs | Bool | Playable | Used to display “I am using earmuffs” effects |
IsOnFriendsList | Whether or not the user viewing the avatar is friends with the user wearing it (shows False locally) | Bool | Other | Used to conditionally show/hide features from non-friends |
AvatarVersion | Set to 3.0 on SDK3 avatars, not set on SDK2 avatars (so will retain default values) | Float | None | Used in stations to determine the type of avatar to be dealt with. You can check AvatarVersion < 3.0 to check this. |
ScaleModified | Returns true if the user is scaled using avatar scaling, false if the avatar is at its default size. | Bool | Playable | - |
ScaleFactor | Relation between the avatar's default height and the current height. An avatar with a default eye-height of 1m scaled to 2m will report 2. | Float | Playable | Used as a fix for scaling animations, but not great for systems since they rely on upload height. More at Designing Scale-Friendly Systems |
ScaleFactorInverse | Inverse relation (1/x) between the avatar's default height and the current height. An avatar with a default eye-height of 1m scaled to 2m will report 0.5. Might be inaccurate at extremes. | Float | Playable | Used as a fix for scaling animations, but not great for systems since they rely on upload height. More at Designing Scale-Friendly Systems |
EyeHeightAsMeters | The avatar's eye height in meters. | Float | Playable | Used as a fix for scaling, the only parameter that is both linear, and doesn’t rely on upload height. Recommended parameter to use for scaling fixes. More at Designing Scale-Friendly Systems |
EyeHeightAsPercent | Relation of the avatar's eye height in meters relative to the default scaling limits (0.2-5.0). An avatar scaled to 2m will report (2.0 - 0.2) / (5.0 - 0.2) = 0.375. | Float | Playable | Used as a fix for scaling, will be outside the 0-1 range if the world allows big scaling. More at Designing Scale-Friendly Systems |
Sync Mode
There are three sync types:
- Speech: Only used for Visemes and other Speech-related variables. Synced as fast as audio syncs, since it’s directly driven by the audio
- Playable: A sync mode which updates every 0.1 to 1 second as needed based on parameter changes. VRC Expression Parameters are synced with Playable sync
- IK: A sync which always syncs every 0.1 seconds, and interpolates
float
values for remote users. IK (so placement of humanoid bones) is also synced with IK sync